package com.hcc.security.service.serviceImpl;

import com.hcc.security.enetity.User;
import com.hcc.security.enetity.UserDetail;
import com.hcc.security.service.UserService;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

/**
 * @Author: HC
 * @Date: 2019/4/22 15:17
 * @Version 1.0
 */
@Service
public class UserDetailServiceImpl implements UserDetailsService {

  @Autowired
  private UserService userService;


  /**
   * 返回的UserDetails是提供给getters的一个接口，以保证非空的认证信息，
   * 例如，用户名，密码，授权和用户帐户是否被启用或禁用。
   * 大多数认证供应商将使用UserDetailsService，即使用户名和密码不作为认证决定的一部分。
   * 他们可以使用返回的UserDetails对象为其GrantedAuthority信息对象，
   * 因为其他的一些系统（如LDAP或X.509或CAS等）承担了实际验证凭证的的责任。
   * @param username
   * @return
   * @throws UsernameNotFoundException
   */
  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    //返回一个认证后的userDetails 对象

    return null;
//    UserDetail user = new UserDetail();
//    user.setLoginName(username);
//    user = loadUser(user);
//    if (null == user) {
//      throw new UsernameNotFoundException("找不到对应用户!!!");
//    }
//    return new UserDetail(user);

  }

  private User loadUser(User user) {
    try {
      return userService.queryByCondition(user);
    } catch (Exception e) {
      throw new InternalAuthenticationServiceException("DCRM用户接口调用失败", e.getCause());
    }
  }
}
